export function formatJavaCode(code) {
    // 将代码按换行符分割成数组
    const lines = code.split('\n')
        .filter(item => {
            return item.trim() !== ''
        })
    let indentLevel = 0;
    const formattedLines = [];
    for (let i = 0; i < lines.length; i++) {
        // 去除每行前后的空格
        const trimmedLine = lines[i].trim();
        // 如果上一行的行尾是 )并且不是@ 或者 { ，
        // 注解@xxx()不换行  if() list.stream()换行
        // 或者当前行以 .开头
        // 则增加缩进级别
        if (i > 0) {
            const prevLine = lines[i - 1].trim();
            if ((prevLine.endsWith(')') && !prevLine.startsWith('@')) ||
                prevLine.endsWith('{') ||
                trimmedLine.startsWith('.')) {
                indentLevel++;
            }
        }

        // 如果当前行以 ) 或者 } 开头，则减少缩进级别
        if (trimmedLine.startsWith(')') || trimmedLine.startsWith('}')) {
            indentLevel--;
        }

        // 生成对应缩进的空格字符串（4 个空格）
        let indent = '    '.repeat(indentLevel);
        // 多行注释，多添加一个空格
        if (trimmedLine.startsWith("*")) {
            indent = ` ${indent}`
        }
        // 如果当前行以 { 开头，增加缩进级别
        if (trimmedLine.startsWith('{')) {
            indentLevel++;
        }
        if (trimmedLine.startsWith('/')) {
            formattedLines.push("")
        }
        // 添加缩进后的行到结果数组
        formattedLines.push(indent + trimmedLine);
    }

    // 在最后一个 import 语句后添加一个空行
    let lastImportIndex = -1;
    for (let i = 0; i < formattedLines.length; i++) {
        if (formattedLines[i].trim().startsWith("import")) {
            lastImportIndex = i;
        }
    }
    if (lastImportIndex !== -1 && lastImportIndex < formattedLines.length - 1) {
        formattedLines.splice(lastImportIndex + 1, 0, "");
    }
    if (formattedLines[0].startsWith('package ')) {
        formattedLines.splice(1, 0, "")
    }
    // 将格式化后的行重新组合成字符串
    return formattedLines.join('\n');
}

export function formatXmlCode(code) {
    code = code.replaceAll('&lt;', '<')
        .replaceAll('&#34;', '"')
        .replaceAll('&gt;', '>')
    const lines = code.split('\n')
        .filter(item => {
            return item.trim() !== ''
        })
    return lines.join('\n')
}
// 测试该方法
const inputCode = `package net.lesscoding.entity;

import import net.lesscoding.common.BaseEntity

import import java.time.LocalDateTime;

import import java.math.BigDecimal;

import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * @author eleven
 * @date  2023-07-24 14:32:00
 * @description srm_user_tags 用户标签实体类
 * Generated By: uToolsPlugin SqlConvert
 * Lesscoding Generate Service
 * @version: 0.0.5
 * Link to: <a href="https://lesscoding.net">https://lesscoding.net</a>
 * mail to:2496290990@qq.com
 */

@Data



public class UserTags extends BaseEntity{

    /**
     * 用户id
     */

    private Integer userId;

    /**
     * 创建时间
     */

    @JsonFormat(pattern = "yyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyy-MM-dd HH:mm:ss")

    private LocalDateTime createTime;

}`;

const formattedCode = formatJavaCode(inputCode);
console.log(formattedCode);
